package edu.java.homework.hw09.tests.test0615;

//Èìà ëè ïðîáëåìè è àêî äà òî êàêâè â ñëåäâàùèÿ êîä:
//Ïîñî÷åòå ïðàâèëíèòå îòãîâîðè èçìåæäó ïðåäëîæåíèòå
//âúçìîæíîñòè îò (a) äî (e):

abstract class MyClass implements Interface1, Interface2 {
    public void f() {
	System.out.println("MyClass --> f() method");
    }

    public void g() {
	System.out.println("MyClass --> g() method");
    }
}

interface Interface1 {
    int VAL_A = 1;
    int VAL_B = 2;

    void f();

    void g();
}

interface Interface2 {
    public static final int VAL_B = 3;
    int VAL_C = 4;

    void g();

    void h();
}

// ( a ) Interface1 è Interface2 íå ñè ñúîòâåòñòâàò è MyClas íå ìîæå
// äà ðåàëèçèðà è äâàòà åäíîâðåìåííî;
// ( b ) MyClass ðåàëèçèðà ñàìî Interface1, ëèïñâà ðåàëèçàöèÿ
// íà ìåòîäà h() îò Interface2;
// ( c ) äåêëàðàöèÿòà íà void g() è â äâàòà èíòåðôåéñà
// ïðåäèçâèêâà ïðîòèâîðå÷èå;
// ( d ) äåêëàðàöèÿòà íà VAL_B è â äâàòà èíòåðôåéñà
// ïðåäèçâèêâà ïðîòèâîðå÷èå;
// ( e ) Íÿìà íèùî íåïðàâèëíî â êîäà è òîé ùå ñå òðàíñëèðà áåç ãðåøêà.

// ( a ) OK, nai veche konstantata "VAL_B" e problem
// ( b )OK; klasat e abstarct, taka che ne e zadaljitelno da se implementirat
// vsichki metodi
// ( c ) error; mislq, che nqma problem v tova, che dvata interfeisa imat metodi
// s ednakva signatura. Tezi 2 metoda shte imat obshta implementatsiq
// ( d ) OK, mislq, che ne e pozvoleno da se deklarira konstantata VAL_B i v
// dvata interfeisa, koito implementirame ednovremenno
// ( e ) error

public class Test0615 extends MyClass {
    public void h() {
	System.out.println("Test0615 --> h() method");
    }

    public static void main(String[] args) {
	MyClass mc = new Test0615();
	System.out.println(((Interface1) mc).VAL_B);
	System.out.println(((Interface2) mc).VAL_B);
	mc.f();
	mc.g();
	mc.h();

	System.out.println(VAL_A);
	// System.out.println( VAL_B); // ïðåäèçâèêâà êîíôëèêò (íåîïðåäåëåíîñò)
	// ïðè èçïúëíåíèå
	System.out.println(Interface1.VAL_B);
	System.out.println(Interface2.VAL_B);
	System.out.println(VAL_C);
    }
}